<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <p data-lake-id="u666f22e5" id="u666f22e5"><span data-lake-id="u0f9d6e39" id="u0f9d6e39">三种垃圾回收算法，标记复制、标记清除、标记整理中，比较适合新生代的算法是标记复制算法。</span></p>
  <p data-lake-id="ufe592b78" id="ufe592b78"><span data-lake-id="u25f3ac14" id="u25f3ac14">​</span><br></p>
  <p data-lake-id="u3fed70b6" id="u3fed70b6"><span data-lake-id="u58fc773f" id="u58fc773f">​</span><br></p>
  <p data-lake-id="u0a17673b" id="u0a17673b"><span data-lake-id="u4426f0d0" id="u4426f0d0">因为对于新生代来说，一般来说GC的次数是要比老年代高很多的，所以需要一个效率更高的算法，而且最好不要有碎片，因为很多对象都是需要先在新生代分配空间的，如果碎片太多的话，那么就会导致很多对象无法正常分配了。</span></p>
  <p data-lake-id="uab286249" id="uab286249"><span data-lake-id="u9ebffe82" id="u9ebffe82">​</span><br></p>
  <p data-lake-id="u38fa0cd3" id="u38fa0cd3"><span data-lake-id="u1168d311" id="u1168d311">所以，</span><strong><span data-lake-id="u2bfadac7" id="u2bfadac7">新生代选择了标记复制算法进行垃圾回收</span></strong><span data-lake-id="uaf58afa4" id="uaf58afa4">，但是标记复制算法存在一个缺点就是会浪费空间，新生代为了解决这个问题，把区域进一步细分成一个Eden区和两个Survivor区，同时工作的只有一个Eden区+一个Survivor区，这样，另外一个Survivor主要用来复制就可以了。只需要动态的调整Eden区和Survivor区的比例就可以降低空间浪费的问题。</span></p>
  <p data-lake-id="ufd27200c" id="ufd27200c"><span data-lake-id="u617b69b5" id="u617b69b5">​</span><br></p>
  <p data-lake-id="u1b7fb087" id="u1b7fb087"><strong><span data-lake-id="u76060d92" id="u76060d92">对于老年代来说，通常会采用标记整理算法</span></strong><span data-lake-id="u349fc247" id="u349fc247">，虽然效率低了一点，但是可以减少空间的浪费并且不会有空间碎片等问题。在有些回收器上面，如CMS，为了降低STW的时长，也会采用</span><strong><span data-lake-id="ua0c71d70" id="ua0c71d70">标记清除算法</span></strong><span data-lake-id="u66be78b7" id="u66be78b7">。</span></p>
  <p data-lake-id="u7ff59898" id="u7ff59898"><span data-lake-id="u988d137b" id="u988d137b">​</span><br></p>
  <p data-lake-id="ude2ccf6c" id="ude2ccf6c"><br></p>
  <p data-lake-id="u2447c82e" id="u2447c82e"><br></p>
  <p data-lake-id="uc1cf9ca3" id="uc1cf9ca3"><br></p>
 </body>
</html>